package Pteste;
// Introduction to Software Testing, www.introsoftwaretesting.com
// Authors: Paul Ammann & Jeff Offutt
// Chapter 2, section 2.3, page 56

class TestPat
{

public static void main (String []argv)
{ 
   final int MAX = 100;
   char subject[] = new char[MAX];
   char pattern[] = new char[MAX];
   if (argv.length != 2)
   {
      System.out.println
         ("java TestPat String-Subject String-Pattern");
      return;
   }
   subject = argv[0].toCharArray();
   pattern = argv[1].toCharArray();
   TestPat testPat = new TestPat ();
   int n = 0;
   if ((n = testPat.pat (subject, pattern)) == -1)
      System.out.println
      ("Pattern string is not a substring of the subject string");
   else
      System.out.println
      ("Pattern string begins at the character " + n);
}

public TestPat () 
{
}

public int pat (char[] subject, char[] pattern) 
{ 
// Post: if pattern is not a substring of subject, return -1 
//       else return (zero-based) index where the pattern (first) 
//       starts in subject 
  
   final int NOTFOUND = -1; 
   int  iSub = 0, rtnIndex = NOTFOUND; 
   boolean isPat  = false; 
   int subjectLen = subject.length; 
   int patternLen = pattern.length; 
  
   while (isPat == false && iSub + patternLen - 1 < subjectLen) 
   { 
      if (subject [iSub] == pattern [0]) 
      { 
         rtnIndex = iSub; // Starting at zero 
         isPat = true; 
         for (int iPat = 1; iPat < patternLen; iPat ++) 
         { 
            if (subject[iSub + iPat] != pattern[iPat]) 
            { 
               rtnIndex = NOTFOUND; 
               isPat = false; 
               break;  // out of for loop 
            } 
         } 
      } 
      iSub ++; 
   } 
   return (rtnIndex); 
} 

}
